package com.xiaoxu.intranetweb.mybatisplusSzappdb.business.truck;



import com.xiaoxu.intranetweb.mybatisplusSzappdb.entity.CIcCardsInfo;

import java.util.Comparator;
import java.util.List;

public class CardAssignmentManager {
    private static Integer lastAssignedCardNo; // 用于存储上次分配的卡号（作为整数对象）
    private static Integer lastAssignedCardNo2; // 用于存储上次分配的卡号（作为整数对象）
    private static Integer lastAssignedCardNo3; // 用于存储上次分配的卡号（作为整数对象）
    /**
     * 获取下一个可用的卡号。
     * @param availableCards 可用的卡号列表
     * @param useCard 如果为 true，则更新 lastAssignedCardNo
     * @return 下一个可用的卡号，如果没有可用的卡号则返回 null
     */
    public static synchronized String getNextAvailableCardNo(List<CIcCardsInfo> availableCards, boolean useCard) {
        if (availableCards.isEmpty()) {
            return null;
        }

        // 按照卡号排序（将字符串转换为整数进行比较）
        availableCards.sort(Comparator.comparingInt(card -> Integer.parseInt(card.getCardinfCardno())));

        // 如果lastAssignedCardNo为空或不存在于当前可用卡号列表中，从最小的开始
        if (lastAssignedCardNo == null || !availableCards.stream().anyMatch(card ->
                Integer.valueOf(card.getCardinfCardno()).equals(lastAssignedCardNo))) {
            lastAssignedCardNo = Integer.parseInt(availableCards.get(0).getCardinfCardno());
            if (useCard) {
                return availableCards.get(0).getCardinfCardno();
            }
        }

        // 查找下一个可用的卡号
        for (int i = 0; i < availableCards.size(); i++) {
            CIcCardsInfo card = availableCards.get(i);
            int currentCardNo = Integer.parseInt(card.getCardinfCardno());
            if (currentCardNo > lastAssignedCardNo) {
                if (useCard) {
                    lastAssignedCardNo = currentCardNo;
                }
                return card.getCardinfCardno();
            }
        }

        // 如果没有找到更大的卡号，则从最小的开始
        if (useCard) {
            lastAssignedCardNo = Integer.parseInt(availableCards.get(0).getCardinfCardno());
        }
        return availableCards.get(0).getCardinfCardno();
    }

    /**
     * 重置上次分配的卡号（可选）
     */
    public static synchronized void resetLastAssignedCardNo() {
        lastAssignedCardNo = null;
    }

    public static synchronized String getNextAvailableCardNo2(List<CIcCardsInfo> availableCards, boolean useCard) {
        if (availableCards.isEmpty()) {
            return null; // 没有可用卡号时返回 null
        }

        // 按照卡号排序（将字符串转换为整数进行比较）
        availableCards.sort(Comparator.comparingInt(card -> Integer.parseInt(card.getCardinfCardno())));

        // 如果 lastAssignedCardNo 为空或不存在于当前可用卡号列表中，从最小的开始
        if (lastAssignedCardNo2 == null || !availableCards.stream().anyMatch(card ->
                Integer.valueOf(card.getCardinfCardno()).equals(lastAssignedCardNo2))) {
            lastAssignedCardNo2 = Integer.parseInt(availableCards.get(0).getCardinfCardno());
            if (useCard) {
                return availableCards.get(0).getCardinfCardno();
            }
        }

        // 查找下一个可用的卡号
        for (int i = 0; i < availableCards.size(); i++) {
            CIcCardsInfo card = availableCards.get(i);
            int currentCardNo = Integer.parseInt(card.getCardinfCardno());
            if (currentCardNo > lastAssignedCardNo2) {
                if (useCard) {
                    lastAssignedCardNo2 = currentCardNo;
                }
                return card.getCardinfCardno();
            }
        }

        // 如果没有找到更大的卡号，则从最小的开始
        if (useCard) {
            lastAssignedCardNo2 = Integer.parseInt(availableCards.get(0).getCardinfCardno());
        }
        return availableCards.get(0).getCardinfCardno();
    }

    /**
     * 重置上次分配的卡号（可选）
     */
    public static synchronized void resetLastAssignedCardNo2() {
        lastAssignedCardNo2 = null;
    }


    public static synchronized String getNextAvailableCardNo3(List<CIcCardsInfo> availableCards, boolean useCard) {
        if (availableCards.isEmpty()) {
            return null; // 没有可用卡号时返回 null
        }

        // 按照卡号排序（将字符串转换为整数进行比较）
        availableCards.sort(Comparator.comparingInt(card -> Integer.parseInt(card.getCardinfCardno())));

        // 如果 lastAssignedCardNo 为空或不存在于当前可用卡号列表中，从最小的开始
        if (lastAssignedCardNo3 == null || !availableCards.stream().anyMatch(card ->
                Integer.valueOf(card.getCardinfCardno()).equals(lastAssignedCardNo3))) {
            lastAssignedCardNo3 = Integer.parseInt(availableCards.get(0).getCardinfCardno());
            if (useCard) {
                return availableCards.get(0).getCardinfCardno();
            }
        }

        // 查找下一个可用的卡号
        for (int i = 0; i < availableCards.size(); i++) {
            CIcCardsInfo card = availableCards.get(i);
            int currentCardNo = Integer.parseInt(card.getCardinfCardno());
            if (currentCardNo > lastAssignedCardNo3) {
                if (useCard) {
                    lastAssignedCardNo3 = currentCardNo;
                }
                return card.getCardinfCardno();
            }
        }

        // 如果没有找到更大的卡号，则从最小的开始
        if (useCard) {
            lastAssignedCardNo3 = Integer.parseInt(availableCards.get(0).getCardinfCardno());
        }
        return availableCards.get(0).getCardinfCardno();
    }

    /**
     * 重置上次分配的卡号（可选）
     */
    public static synchronized void resetLastAssignedCardNo3() {
        lastAssignedCardNo3 = null;
    }
}